load("@rules_proto//proto:defs.bzl", "proto_library")

# gazelle:ignore
load("@io_bazel_rules_go//go:def.bzl", "go_library")
load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
load("//proto:ssz_proto_library.bzl", "ssz_proto_files")
load("@com_github_prysmaticlabs_ethereumapis//tools:ssz.bzl", "SSZ_DEPS", "ssz_gen_marshal")

go_proto_library(
    name = "v1_go_proto",
    compiler = "//:proto_compiler",
    importpath = "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1",
    proto = ":v1_proto",
    visibility = ["//visibility:public"],
    deps = [
        "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
        "@com_github_prysmaticlabs_go_bitfield//:go_default_library",
    ],
)

ssz_gen_marshal(
    name = "ssz_generated_files",
    go_proto = ":v1_go_proto",
    includes = [
        "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library",
    ],
    objs = [
        "BeaconBlocksByRangeRequest",
        "ENRForkID",
        "MetaData",
        "Fork",
        "ForkData",
        "HistoricalBatch",
        "Status",
        "BeaconState",
        "SigningData",
    ],
)

go_library(
    name = "go_default_library",
    srcs = [":ssz_generated_files"],
    embed = [":v1_go_proto"],
    visibility = ["//visibility:public"],
    deps = SSZ_DEPS,
)

ssz_proto_files(
    name = "ssz_proto_files",
    srcs = [
        "messages.proto",
        "types.proto",
    ],
    config = select({
        "//conditions:default": "mainnet",
        "//proto:ssz_mainnet": "mainnet",
        "//proto:ssz_minimal": "minimal",
    }),
)

proto_library(
    name = "v1_proto",
    srcs = [":ssz_proto_files"],
    visibility = ["//visibility:public"],
    deps = [
        "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:proto",
        "@com_google_protobuf//:timestamp_proto",
        "@gogo_special_proto//github.com/gogo/protobuf/gogoproto",
    ],
)
